package it.blog.controller;

import java.io.IOException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.ws.wsaddressing.W3CEndpointReference;


import it.blog.stub.*;


public class AddComment extends HttpServlet{

	private static final long serialVersionUID = 1L;

	
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		Comment acomment=new Comment();
		
		//Acquisisco le informazioni circa la sessione e l'utente
		HttpSession session = request.getSession();
		
		User user = (User) session.getAttribute("user");
	
		AuthBlogPortalService us= new AuthBlogPortalService();
		W3CEndpointReference ref=(W3CEndpointReference)session.getAttribute("ref");
		AuthBlogPortal userAuthenticate=us.getPort(ref, AuthBlogPortal.class);
		
		
		//Rimuovo l'attributo message che potrebbe essere rimasto da una richiesta precedente
		session.removeAttribute("mess");
		
		//Acquisisco il commento inserito dall'utente e setto le info necessarie al commento
		String comment = request.getParameter("contentPost");

		int blogID=Integer.parseInt(request.getParameter("blogID"));
		int postID=Integer.parseInt(request.getParameter("postID"));
		
		acomment.setBlogID(blogID);
		acomment.setPostID(postID);
		acomment.setCommentator(user.getUsername());
		acomment.setComment(comment);
	
		Calendar c = Calendar.getInstance();

		try {
			acomment.setAddDate(toXMLGregorianCalendar(c));
		} catch (DatatypeConfigurationException e) {
			e.printStackTrace();
		}
		
		//Controllo se il commento e' valido (non vuoto)
		if(comment!=null && comment.length()!=0) {
			//aggiungo il commento
			boolean result=false;
			result = userAuthenticate.addComment(acomment);

			//controllo l'esito e decido cosa fare
			if(result) { 
				//Rimuovo l'attributo comment dalla richiesta e rimando alla pagina opportuna
				
				response.sendRedirect(response.encodeRedirectURL(request.getContextPath()+ "/PostView?blogID=" + 
						blogID + "&postID=" + postID+"&p=1"));
				
			}
			else { 
				//l'aggiunta del commento non e' andata a buon fine
				session.setAttribute("mess","Errore nell'inserimento del commento");
				response.sendRedirect(response.encodeRedirectURL(request.getContextPath()+"/postView.jsp"));
			}
		}
		else { //Commento vuoto
			//Richiamare la pagina col messaggio
			response.sendRedirect(response.encodeRedirectURL(request.getContextPath()+"/postView.jsp"));
		}
	}
	
	

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}
	private static XMLGregorianCalendar toXMLGregorianCalendar(Calendar c) throws DatatypeConfigurationException {
		GregorianCalendar gc = new GregorianCalendar();
		gc.setTimeInMillis(c.getTimeInMillis());
		XMLGregorianCalendar xc = DatatypeFactory.newInstance().newXMLGregorianCalendar(gc);
		return xc;
	}
	
	
}
